{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入必要的包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# -*- coding=utf-8 -*-"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.linear_model import LassoCV \n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.linear_model import  RidgeCV \n",
    "from sklearn.metrics import r2_score\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('day.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看出season,mnth,holiday,weekday,workingday,weathersit 是分类型特征 temp,atemp,hum,windspeed 是数值型特征。dteday和instant特征对预测不起作用，可以删去."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = data.drop(columns = ['instant' , 'casual' , 'registered' , 'dteday'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "空值处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "season        0\n",
       "yr            0\n",
       "mnth          0\n",
       "holiday       0\n",
       "weekday       0\n",
       "workingday    0\n",
       "weathersit    0\n",
       "temp          0\n",
       "atemp         0\n",
       "hum           0\n",
       "windspeed     0\n",
       "cnt           0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因为是预测2012年的，所以可以把2012年的特征数据标记为测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "trainData = data[data[\"yr\"]==0]\n",
    "testData  = data[data[\"yr\"]==1]\n",
    "trainData = trainData.drop(columns=['yr'])\n",
    "testData  = testData.drop(columns=['yr'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据的特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,u'\\u6570\\u636e\\u91cf')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xbc60160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#风速\n",
    "fig = plt.figure(figsize = (13,4))\n",
    "sns.distplot(trainData.windspeed.values, bins=30, kde=True)\n",
    "plt.title('风速特征分析'.decode('utf-8'))\n",
    "plt.xlabel('风速数量'.decode('utf-8'))\n",
    "plt.ylabel('数据量'.decode('utf-8'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 去掉风速大于0.4的噪声\n",
    "trainData = trainData[trainData['windspeed']<=0.4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,u'data values')"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xcd23668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xf32e908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#同理分析湿度和温度\n",
    "#湿度直方图\n",
    "fig=plt.figure(figsize=(15,5))\n",
    "plt.subplot(121)\n",
    "sns.distplot(trainData.hum.values, bins=30, kde=True)\n",
    "plt.title(\" Histogram of humidity\");\n",
    "plt.xlabel('hum value')\n",
    "plt.ylabel('data values')\n",
    "\n",
    "#温度直方图\n",
    "fig=plt.figure(figsize=(15,5))\n",
    "plt.subplot(122)\n",
    "sns.distplot(trainData.temp.values, bins=30, kde=True)\n",
    "plt.title(\" Histogram of temperature\");\n",
    "plt.xlabel('temp value')\n",
    "plt.ylabel('data values')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "trainData= trainData[trainData['hum']>0.2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 划分训练数据和预测数据\n",
    "trainData_y = trainData.cnt.values\n",
    "trainData_x = trainData.drop(columns=['cnt'])\n",
    "testData_y = testData.cnt.values\n",
    "testData_x = testData.drop(columns=['cnt'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数值归一化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler = MinMaxScaler()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\dev\\anaconda2\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by MinMaxScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n"
     ]
    }
   ],
   "source": [
    "train_x = scaler.fit(trainData_x)\n",
    "train_y = scaler.fit(trainData_y.reshape(1,-1))\n",
    "text_x = scaler.fit(testData_x)\n",
    "text_y = scaler.fit(testData_y.reshape(1,-1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "float() argument must be a string or a number",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-33-733225fbc0af>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m     10\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     11\u001b[0m \u001b[1;31m#模型训练\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 12\u001b[1;33m \u001b[0mridge\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtrain_x\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrain_y\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     13\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     14\u001b[0m \u001b[1;31m#预测\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\dev\\anaconda2\\lib\\site-packages\\sklearn\\linear_model\\ridge.pyc\u001b[0m in \u001b[0;36mfit\u001b[1;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[0;32m   1112\u001b[0m                                   \u001b[0mgcv_mode\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgcv_mode\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1113\u001b[0m                                   store_cv_values=self.store_cv_values)\n\u001b[1;32m-> 1114\u001b[1;33m             \u001b[0mestimator\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msample_weight\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msample_weight\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1115\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0malpha_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mestimator\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0malpha_\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1116\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstore_cv_values\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\dev\\anaconda2\\lib\\site-packages\\sklearn\\linear_model\\ridge.pyc\u001b[0m in \u001b[0;36mfit\u001b[1;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[0;32m    987\u001b[0m         \"\"\"\n\u001b[0;32m    988\u001b[0m         X, y = check_X_y(X, y, ['csr', 'csc', 'coo'], dtype=np.float64,\n\u001b[1;32m--> 989\u001b[1;33m                          multi_output=True, y_numeric=True)\n\u001b[0m\u001b[0;32m    990\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0msample_weight\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mNone\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msample_weight\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfloat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    991\u001b[0m             \u001b[0msample_weight\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcheck_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msample_weight\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mensure_2d\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\dev\\anaconda2\\lib\\site-packages\\sklearn\\utils\\validation.pyc\u001b[0m in \u001b[0;36mcheck_X_y\u001b[1;34m(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)\u001b[0m\n\u001b[0;32m    571\u001b[0m     X = check_array(X, accept_sparse, dtype, order, copy, force_all_finite,\n\u001b[0;32m    572\u001b[0m                     \u001b[0mensure_2d\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mallow_nd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mensure_min_samples\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 573\u001b[1;33m                     ensure_min_features, warn_on_dtype, estimator)\n\u001b[0m\u001b[0;32m    574\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mmulti_output\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    575\u001b[0m         y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,\n",
      "\u001b[1;32mD:\\dev\\anaconda2\\lib\\site-packages\\sklearn\\utils\\validation.pyc\u001b[0m in \u001b[0;36mcheck_array\u001b[1;34m(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)\u001b[0m\n\u001b[0;32m    431\u001b[0m                                       force_all_finite)\n\u001b[0;32m    432\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 433\u001b[1;33m         \u001b[0marray\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdtype\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0morder\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0morder\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mcopy\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    434\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    435\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mensure_2d\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mTypeError\u001b[0m: float() argument must be a string or a number"
     ]
    }
   ],
   "source": [
    "#岭回归／L2正则\n",
    "#class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, \n",
    "#                                  normalize=False, scoring=None, cv=None, gcv_mode=None, \n",
    "#                                  store_cv_values=False)\n",
    "#设置超参数（正则参数）范围\n",
    "alphas = [ 0.01,0.02,0.03, 0.04,0.05,0.06,0.07,0.08,0.09,0.1]\n",
    "\n",
    "#生成一个RidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "\n",
    "#模型训练\n",
    "ridge.fit(train_x, train_y)    \n",
    "\n",
    "#预测\n",
    "y_test_pred_ridge = ridge.predict(text_x) \n",
    "y_train_pred_ridge = ridge.predict(text_y)\n",
    "\n",
    "# 评估，使用r2_score评价模型在测试集和训练集上的性能\n",
    "print 'The r2 score of RidgeCV on test is', r2_score(yTest, y_test_pred_ridge)\n",
    "print 'The r2 score of RidgeCV on train is', r2_score(yTrain, y_train_pred_ridge)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
